/**
 * 产品数据处理工具函数
 */

/**
 * 验证产品数据的完整性
 * @param {Object} product - 产品数据对象
 * @returns {Object} 验证结果
 */
export const validateProductData = (product) => {
    const errors = []
    const warnings = []

    if (!product) {
        errors.push('产品数据为空')
        return { isValid: false, errors, warnings }
    }

    // 检查必需字段
    if (!product.id) {
        errors.push('缺少产品ID')
    }

    if (!product.title || typeof product.title !== 'string') {
        errors.push('产品标题无效')
    }

    if (!product.type || !['website', 'app'].includes(product.type)) {
        errors.push('产品类型无效')
    }

    // 检查可选字段
    if (!product.description) {
        warnings.push('缺少产品描述')
    }

    if (!product.created_at) {
        warnings.push('缺少创建时间')
    }

    if (product.type === 'website' && !product.url) {
        warnings.push('网站类型产品缺少访问链接')
    }

    if (product.type === 'app' && !product.file_path) {
        warnings.push('应用类型产品缺少文件路径')
    }

    return {
        isValid: errors.length === 0,
        errors,
        warnings
    }
}

/**
 * 清理和标准化产品数据
 * @param {Object} product - 原始产品数据
 * @returns {Object} 清理后的产品数据
 */
export const sanitizeProductData = (product) => {
    if (!product) return null

    return {
        id: product.id || null,
        title: product.title || '未命名产品',
        description: product.description || '',
        type: product.type || 'website',
        url: product.url || null,
        file_path: product.file_path || null,
        thumbnail_url: product.thumbnail_url || null,
        created_at: product.created_at || null,
        updated_at: product.updated_at || null
    }
}

/**
 * 获取产品类型的显示配置
 * @param {string} type - 产品类型
 * @returns {Object} 类型配置
 */
export const getProductTypeConfig = (type) => {
    const configs = {
        website: {
            label: '网站',
            color: 'blue',
            icon: '🌐',
            actionText: '访问网站',
            description: '在线网站或Web应用'
        },
        app: {
            label: '应用',
            color: 'green',
            icon: '📱',
            actionText: '下载应用',
            description: '桌面应用程序或移动应用'
        }
    }

    return configs[type] || configs.website
}

/**
 * 格式化产品数据用于显示
 * @param {Object} product - 产品数据
 * @returns {Object} 格式化后的产品数据
 */
export const formatProductForDisplay = (product) => {
    if (!product) return null

    const sanitized = sanitizeProductData(product)
    const typeConfig = getProductTypeConfig(sanitized.type)

    return {
        ...sanitized,
        typeConfig,
        hasValidUrl: Boolean(sanitized.url && sanitized.url.startsWith('http')),
        hasValidFile: Boolean(sanitized.file_path),
        hasThumbnail: Boolean(sanitized.thumbnail_url)
    }
}

/**
 * 检查产品是否可以执行操作（访问/下载）
 * @param {Object} product - 产品数据
 * @returns {Object} 操作可用性
 */
export const getProductActions = (product) => {
    if (!product) {
        return {
            canVisit: false,
            canDownload: false,
            canCopyLink: false
        }
    }

    const hasValidUrl = Boolean(product.url && product.url.startsWith('http'))
    const hasValidFile = Boolean(product.file_path)

    return {
        canVisit: product.type === 'website' && hasValidUrl,
        canDownload: product.type === 'app' && hasValidFile,
        canCopyLink: hasValidUrl
    }
}

/**
 * 生成产品的SEO友好URL
 * @param {Object} product - 产品数据
 * @returns {string} SEO友好的URL
 */
export const generateProductSlug = (product) => {
    if (!product || !product.title) return ''

    return product.title
        .toLowerCase()
        .replace(/[^\w\s-]/g, '') // 移除特殊字符
        .replace(/\s+/g, '-') // 空格替换为连字符
        .replace(/-+/g, '-') // 多个连字符合并为一个
        .trim()
}